package com.haiyou.data.common.accessor;

import java.io.Serializable;

/**
 * key管理器
 * 
 * @author Administrator
 *
 * @param <K>
 */
public interface IdManager<K extends Serializable & Comparable<K>> {

	/** key复用器 */
	default KeyMultiplexer<K> getKeyMultiplexer() {
		return null;
	}

	/** key回收器 */
	default KeyRecycler<K> getKeyRecycler() {
		return null;
	}

	/** key生成器 */
	default KeyGenerator<K> getKeyGenerator() {
		return null;
	}

	/**
	 * key回收器
	 * 
	 * @author Administrator
	 *
	 * @param <K>
	 */
	public interface KeyRecycler<K extends Serializable & Comparable<K>> {
		/**
		 * 回收key
		 * 
		 * @param keys
		 */
		void retrieve(K... keys);
	}

	/**
	 * key复用器
	 * 
	 * @author Administrator
	 *
	 * @param <K>
	 */
	public interface KeyMultiplexer<K extends Serializable & Comparable<K>> {
		/**
		 * 重用key，如果回收站有的话
		 * 
		 * @return
		 */
		K reuse();
	}

	/**
	 * key生成器
	 * 
	 * @author Administrator
	 *
	 * @param <K>
	 */
	public interface KeyGenerator<K extends Serializable & Comparable<K>> {
		/**
		 * 生成key
		 * 
		 * @return
		 */
		K generate();
	}

}
